package cn.edu.sjtu.se.dslab.DAO;

import java.util.List;

import cn.edu.sjtu.se.dslab.actionbean.PageBean;
import cn.edu.sjtu.se.dslab.exception.DBException;


/**
 * 	
 * 	数据处理层基类的接口类
 * 	@author sunke
 * 	@update 
 */
public interface IBaseDAO<T> {


	
	/**
	 * 	根据hql语句查询信息<BR>
	 * 	@param	hql语句
	 * 	@return 查询结果(泛型List)
	 */
	List<T> find(String hql)throws DBException;
	
	/**
	 * 	根据hql语句查询信息<BR>
	 * 	@param	hql语句,参数
	 * 	@return 查询结果(泛型List)
	 */
	List<T> find(String hql,Object value)throws DBException;
	
	/**
	 * 	根据hql语句查询信息<BR>
	 * 	@param	hql语句，参数（多个）
	 * 	@return 查询结果(泛型List)
	 */
	List<T> find(String hql,Object[] values)throws DBException;
	
	/**
	 * 	根据hql语句查询信息<BR>
	 * 	@param	hql语句，参数（多个）
	 * 	@return 查询结果(泛型List)
	 */
	String findSingleValue(String sql)throws DBException;
	
	/**
	 * 	根据hql语句查询要更新的单条记录信息<BR>
	 * 	@param	hql语句，参数（多个）
	 * 	@return 查询结果(泛型List)
	 */
	List<String> findSingleRecord(String sql)throws DBException;	
	
	/**
	 * 	根据hql语句查询信息（分页）<BR>
	 * 	@param	当前页起始索引hql语句
	 * 	@return 查询结果(List类型List)
	 */
	@SuppressWarnings("unchecked")
	PageBean findByHqlPage(int pageNum,String hql)throws DBException;
	
	/**
	 * 	根据hql语句查询信息（不分页）<BR>
	 * 	@param	hql语句
	 * 	@return 查询结果(List类型List)
	 */
	List<List<String>> findByHql(String hql)throws DBException;
	
	

	/**
	 * 	新增<BR>
	 * 	@param	数据集
	 * 	@throws	DBException
	 */
	void save(T obj) throws DBException ;
	

}
